﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BIZMA._controls;
using BIZModel;
using BL.BIZControls;
using System.Configuration;
using System.Web.Security;
using System.Web.Configuration;
using BIZMA.BL.Security;
using BIZMA._controls.Security;


namespace BIZMA._controls.Users
{
    public partial class Edit_Group : BIZEditControl, IBIZControlDefaultMethods
    {
        #region default
        public void DefaultListLoad()
        {
            throw new NotImplementedException();
        }

        public void DefaultListLoad(Guid Id, string loadByType)
        {
            throw new NotImplementedException();
        }

        public void DefaultEditNew()
        {
            NewGroup();
        }

        public void DefaultEditNew(Guid Id, string editByType)
        {
            throw new NotImplementedException();
        }

        public void DefaultEditLoad(Guid Id)
        {
            LoadGroup(Id);
        }


        #endregion

        //Properties för att hålla reda på om en dialog kan öppnas eller om den redan är öppen i en underliggande dialog
        public bool CanAddPermissionDialog { get { return ViewState["CanAddPermissionDialog"] != null ? (bool)ViewState["CanAddPermissionDialog"] : true; } set { ViewState["CanAddPermissionDialog"] = value; } }
        public string ActiveTab { get { return ViewState["ActiveTab"] != null ? (string)ViewState["ActiveTab"] : "group"; } set { ViewState["ActiveTab"] = value; } }
       
        #region This Dialog
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack || !InitLoaded)
            {
                InitLoaded = true;
                SetTabSize = true;
                tabs.ActiveIndex = 0;

                //Gör sådant som man gör på pageload här typ fyll "statisk" dropdown med värden mm 

            }


            
        }




        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            //här gör man alla init inställningar typ lägga till eventhandlers och annat som styr sidan

            if (ContainerControl != null)
            {
                ContainerControl.Title = "Administrera grupp";
                ContainerControl.ButtonsClick += new ButtonsHandler(ContainerControl_ButtonsClick);
                ContainerControl.ShowButtons(true, true, true, true);

                if (ModalContainerControl != null)
                {
                    ModalContainerControl.Width = 700;
                    ModalContainerControl.Height = 470;
                    ModalContainerControl.FormScrollStyleChanged += new EventHandler(ModalContainerControl_FormScrollStyleChanged);                    
                }

                //Måste ha unika valgroup så att inte olika kontoller triggar varandras valideringar
                val_Name.ValidationGroup = ContainerControl.ValGroupSave;                
            }

            //Kontrollera om ytterligare dialoger kan öppnas eller om de redan är öppnade i underliggade dialoger
            CanAddPermissionDialog = mcPermissions.CanAddPopupControl(BIZControl.GroupPermissionList);
            //BaseBL.BtnOpenEnabled(btnAddUser, CanAddUsersDialog, ViewState);

            ////Regga alla event här istället för i sidan eftersom det funkar så dåligt med automatisering av eventstödet i VS
            btnPerm.Command += new CommandEventHandler(btnPerm_Command);
            


        }



        void ModalContainerControl_FormScrollStyleChanged(object sender, EventArgs e)
        {

            oneFormpart.Attributes["style"] = formscroll.Attributes["style"];
            
            if (ModalContainerControl != null)
            {
                if (listUsers.FormScrollControll != null)
                {
                    listUsers.FormScrollControll.Attributes["style"] = formscroll.Attributes["style"];
                }

                string sheight = formscroll.Style["Height"].Replace("px", "").Replace(";", "");
                int height = 0;
                if (int.TryParse(sheight, out height))
                {
                    height = ModalContainerControl.GetScrollHeight(height, false, false,false);

                    if (listUsers.ListScroll != null)
                    {
                        listUsers.ListScroll.Style.Remove(HtmlTextWriterStyle.Height);
                        listUsers.ListScroll.Style.Add(HtmlTextWriterStyle.Height, (height - listUsers.FormPartHeight).ToString() + "px");
                    }
                }

            }
        }

        void ContainerControl_ButtonsClick(object sender, ActionType actionType)
        {
            if (actionType == ActionType.Save || actionType == ActionType.SaveClose)
            {
                Save();
            }
            else if (actionType == ActionType.Delete)
            {
                Delete();
            }
        }


        #endregion

        #region methods this dialog
        /// <summary>
        /// Den här funktionen aktiverar inativerar knappar som kräver att formuläret har sparats/laddats och det finns data som 
        /// knappen kan använda ex Man kan inte öppna en planering för ett projekt om inte projektet har skapats/laddats först
        /// </summary>
        private void ToggleButtons()
        {
            if (!CanAddPermissionDialog)
            {
                BaseBL.BtnOpenEnabled(btnPerm, false, ViewState);
            }
            
            if (CurrentId != Guid.Empty)
            {
                UserGroupTab.Visible = true;

                ////man måste förs checka så att inte knappen är avaktiverad pga att dialogen redan finns i underliggande dialog
                if (CanAddPermissionDialog)
                {
                    if (SecurityBL.HasSysFunction(SecurityBL.SYSFUNCTION_SYSTEM_SYSTEMGROUPS))
                    {
                        BaseBL.BtnNeedsDataEnabled(btnPerm, chkIsSystemGroup.Checked, ViewState);
                    }
                    else
                    {
                        BaseBL.BtnPermissionEnabled(btnPerm, false, ViewState);
                    }
                
                }


            }
            else
            {
                tabs.ActiveIndex = 0;
                UserGroupTab.Visible = false;
                if (CanAddPermissionDialog)
                {
                    BaseBL.BtnNeedsDataEnabled(btnPerm, false, ViewState);
                }
            }
        }

        /// <summary>
        /// Metod för att tömma sida och aktivera läge för att skapa nytt
        /// </summary>
        public void NewGroup()
        {
            //CurrentProjectId = Guid.Empty;
            LoadGroup(Guid.Empty);
            tabs.ActiveIndex = 0;
            UserGroupTab.Visible = false;
        }

        /// <summary>
        /// ladda formuläret med existerande data för att ex uppdatera
        /// </summary>
        /// <param name="groupId"></param>
        public void LoadGroup(Guid groupId)
        {
            InitLoaded = true;
            CurrentId = groupId;
            tabs.ActiveIndex = 0;

            if (SecurityBL.HasSysFunction(SecurityBL.SYSFUNCTION_SYSTEM_USERGROUPS) == false)
            {
                throw new AccessViolationException("Du har inte rättigheter att admninistrera grupper");
            }


            if (groupId != Guid.Empty)
            {
                BIZMAEntities ent = BaseBL.GetEnt();
                BIZModel.UserGroup UG = ent.UserGroups.FirstOrDefault(q => q.UserGroupId == groupId);
                                
                if (SecurityBL.HasSysFunction(SecurityBL.SYSFUNCTION_SYSTEM_SYSTEMGROUPS) == true)
                {
                    chkIsSystemGroup.Visible = true;
                }
                else if (UG.IsSystemGroup && SecurityBL.HasSysFunction(SecurityBL.SYSFUNCTION_SYSTEM_SYSTEMGROUPS) == false)
                {
                    throw new AccessViolationException("Du har inte rättigheter att admninistrera systemgrupper");
                }
                else if (UG.IsSystemGroup == false && SecurityBL.HasSysFunction(SecurityBL.SYSFUNCTION_SYSTEM_SYSTEMGROUPS) == false)
                {
                    chkIsSystemGroup.Visible = false;
                }

                txtName.Text = UG.Name;
                txtDescription.Text = UG.Description;
                txtProviderKey.Text = UG.ProviderKey;
                chkIsSystemGroup.Checked = UG.IsSystemGroup;

                listUsers.LoadByGroup(CurrentId);
            }
            else
            {
                //Checka rättigheter för att kunna skapa systemgrupper
                chkIsSystemGroup.Visible = SecurityBL.HasSysFunction(SecurityBL.SYSFUNCTION_SYSTEM_SYSTEMGROUPS);

                txtName.Text = "";
                txtDescription.Text = "";
                txtProviderKey.Text = "";
                chkIsSystemGroup.Checked = false;

                listUsers.Clear();

            }

            ToggleButtons();
        }


        private void Save()
        {
            //SAVE
            if (Page.IsValid)
            {

                BIZMAEntities ent = BaseBL.GetEnt();
                BIZModel.UserGroup UG = null;

                if (CurrentId == Guid.Empty)
                {
                    CurrentId = Guid.NewGuid();
                    UG = UserGroup.CreateUserGroup(CurrentId, 0, txtName.Text,chkIsSystemGroup.Checked, false);
                    UG.Description = txtDescription.Text;
                    UG.ProviderKey = txtProviderKey.Text;
                    ent.AddToUserGroups(UG);
                }
                else
                {
                    UG = ent.UserGroups.FirstOrDefault(q => q.UserGroupId == CurrentId);
                    UG.Name = txtName.Text;
                    UG.Description = txtDescription.Text;
                    UG.ProviderKey = txtProviderKey.Text;
                    UG.IsSystemGroup = chkIsSystemGroup.Checked;
                }


                ent.SaveChanges();

                //Ändra aktivering av knappar efter sparning
                LoadGroup(CurrentId);
            }
        }

        private void Delete()
        {
            BIZMAEntities ent = BaseBL.GetEnt();
            BIZModel.UserGroup UG = ent.UserGroups.FirstOrDefault(q => q.UserGroupId == CurrentId);
            ent.DeleteObject(UG);
            ent.SaveChanges();

        }
        #endregion


        #region USERS DIALOG

        void btnPerm_Command(object sender, CommandEventArgs e)
        {
            if (CanAddPermissionDialog)
            {
                mcPermissions.AddDefaultListLoad(BIZControl.GroupPermissionList, CurrentId, List_SysGroupPermissions.ObjectTypeGroup);
            }
        }

        #endregion




    }
}